//
//  FiveContentViewController.swift
//  swiftTS
//
//  Created by 航电 on 2020/3/6.
//  Copyright © 2020 航电. All rights reserved.
//

import UIKit

class FiveContentViewController: UIViewController {

    let cellId = "five_content_cell";
    lazy var mainTableView:UITableView = {
        let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: screenMainSize.width, height: screenMainSize.height), style: UITableView.Style.plain);
        tableView.backgroundColor = .white;
        tableView.delegate = self;
        tableView.dataSource = self;
        tableView.register(FiveContentCell.self, forCellReuseIdentifier: cellId);
        return tableView;
    }();
    
    lazy var dataArray:NSMutableArray = {
        var dataArr = NSMutableArray();
        
        let dateFormatter = DateFormatter();
        dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss";
        let time = dateFormatter.string(from: Date());
        dataArr.add(["title":"新闻点击展开预览1","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览2","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览3","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览4","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览5","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览6","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览7","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览8","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        dataArr.add(["title":"新闻点击展开预览9","time":String(time),"content":"tableView自动行高的使用，设置行高为 UITableViewAutomaticDimension ，默认设置新闻内容label的行高为2，点击后变为0（即全部显示）需要注意的是使用storyBoard进行约束时，必须将 tableViewCell 的 ContentView 从上到下填满，否则无法计算出当前行高。"]);
        return dataArr;
    }();
    
    fileprivate var selectArray = NSMutableArray();
    
    fileprivate var currentSelectPath:IndexPath = NSIndexPath(item: -1, section: 0) as IndexPath;
    fileprivate var isStartSelectPath:Bool = false; //开始点击
    fileprivate var isSingleSelectPath:Bool = true;//是否是单选
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "cell展开";
        // Do any additional setup after loading the view.
        self.onCreateUIForNavigation();
        self.onCreateUIForView();
    }
    

    //TODO:UI
    fileprivate func onCreateUIForNavigation() {
        let bt = UIButton(type: .custom);
        bt.frame = CGRect(x: 0, y: 0, width: 60, height: 38);
        bt.setTitle("单选", for: .normal);
        bt.setTitleColor(.red, for: .normal);
        bt.addTarget(self, action: #selector(onClickBtForSelectTableView(bt:)), for: .touchUpInside);
        let rightItem = UIBarButtonItem(customView: bt);
        self.navigationItem.rightBarButtonItem = rightItem;
    }
    
    fileprivate func onCreateUIForView() {
        self.view.backgroundColor = .white;
        
        self.view.addSubview(self.mainTableView);
    }
    
    //TODO:Actions
    @objc fileprivate func onClickBtForSelectTableView(bt:UIButton) {
        bt.isSelected = !bt.isSelected;
        if bt.isSelected {
            self.isSingleSelectPath = false;
            bt.setTitle("多选", for: .normal);
        } else {
            self.isSingleSelectPath = true;
            bt.setTitle("单选", for: .normal);
        }
        self.isStartSelectPath = false;
        self.selectArray.removeAllObjects();
        self.mainTableView.reloadData();
    }

}

extension FiveContentViewController:UITableViewDelegate,UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataArray.count;
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId) as! FiveContentCell;
        cell.selectionStyle = .none;
        
        if self.dataArray.count > indexPath.row {
            var isCurrentPath = false;
            if self.isStartSelectPath {
                if self.isSingleSelectPath {//单选
                    //点击的是当前行 并且判断是否展开还是合并
                    if self.currentSelectPath == indexPath && self.selectArray.contains(indexPath) {
                        isCurrentPath = true;
                    }
                } else { //多选
                    if self.selectArray.contains(indexPath) {
                        isCurrentPath = true;
                    }
                }
            }
            
            cell.onChangeDataForCell(dic: self.dataArray[indexPath.row] as! Dictionary<String, AnyObject>,isShow: isCurrentPath);
        }
        
        return cell;
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        var isCurrentPath = false;
        //开始点击，不然默认合并
        if self.isStartSelectPath {
            if self.isSingleSelectPath {//单选
                //点击的是当前行 并且判断是否展开还是合并
                if self.currentSelectPath == indexPath && self.selectArray.contains(indexPath) {
                    isCurrentPath = true;
                }
            } else { //多选
                if self.selectArray.contains(indexPath) {
                    isCurrentPath = true;
                }
            }
        }
        
        if self.dataArray.count > indexPath.row {
            return FiveContentCell.onShowHeight(isShow: isCurrentPath,dic: self.dataArray[indexPath.row] as! Dictionary<String, AnyObject>);
        }
        
        return 0;
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.isStartSelectPath = true;
        self.currentSelectPath = indexPath;
        
        if self.isSingleSelectPath {//单选
            if self.selectArray.count > 0 {
                tableView.reloadRows(at: self.selectArray as! [IndexPath], with: .fade);
            }
            if self.selectArray.contains(indexPath) {
                self.selectArray.removeAllObjects();
            } else {
                self.selectArray.removeAllObjects();
                self.selectArray.add(indexPath);
            }
        } else {//多选
            if self.selectArray.contains(indexPath) {
                self.selectArray.remove(indexPath);
            } else {
                self.selectArray.add(indexPath);
            }
        }
        
        
        
        tableView.reloadRows(at: [indexPath], with: .fade);
    }
    
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true;
    }
    
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete;
    }
    
    func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
        var name = "哈哈";
        switch indexPath.row {
        case 0:
            name="once"
        case 1:
            name="beidi"
        default:
            name="哈哈"
        }
        return name;
    }
    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            if self.dataArray.count > indexPath.row {
                self.dataArray.removeObject(at: indexPath.row);
                tableView.deleteRows(at: [indexPath], with: .fade);
            }
        }
    }
}
